import axios from "axios"
import { getRedirectPath } from '../util'

// const REGISTER_SUCCESS = 'REGISTER_SUCCESS'
// const LOGIN_SUCCESS = 'LOGIN_SUCCESS'
const AUTH_SUCCESS = 'AUTH_SUCCESS'
const ERROR_MSG = 'ERROR_MSG'
const LOAD_DATA = 'LOAD_DATA'
const LOGOUT = 'LOGOUT'

const initState = {
    redirectTo: '',
    // isAuth: false,
    msg: '',
    user: '',
    // pwd: '',
    type: ''
}

// reducer
export function user(state=initState, action) {
    switch(action.type) {
        case AUTH_SUCCESS:
            return {...state, msg:'', redirectTo: getRedirectPath(action.payload), ...action.payload}
        // case REGISTER_SUCCESS:
        //     return {...state, msg:'', redirectTo: getRedirectPath(action.payload), isAuth: true, ...action.payload}
        // break
        // case LOGIN_SUCCESS:
        //     return {...state, msg:'', redirectTo: getRedirectPath(action.payload), isAuth: true, ...action.payload}
        // break
        case LOAD_DATA:
            return {...state, ...action.payload}
        case LOGOUT:
            return {...initState, redirectTo: '/login'}
        case ERROR_MSG:
            return {...state, msg: action.msg, isAuth: false}
        default:
            return state
    }
}

function authSuccess(obj) {
    const {pwd, ...data} = obj
    return {type: AUTH_SUCCESS, payload: data}
}
// function registerSuccess(data) {
//     return { type: REGISTER_SUCCESS, payload: data }
// }
// function loginSuccess(data) {
//     return {type: LOGIN_SUCCESS, payload: data}
// }

function errorMsg(msg) {
    return { msg, type: ERROR_MSG }
}

export function loadData(userinfo) {
    return {type: LOAD_DATA, payload: userinfo}
}

export function update(data) {
    return dispatch=>{
        axios.post('/user/update', data).then(res => {
            if(res.status === 200 && res.data.code === 0) {
                dispatch(authSuccess(res.data.data))
            } else {
                dispatch(errorMsg(res.data.msg))
            }
        })
    }
}

export function updateAsync(data) {
    return async dispatch=>{
        const res = await axios.post('/user/update', data)
        if(res.status === 200 && res.data.code === 0) {
            dispatch(authSuccess(res.data.data))
        } else {
            dispatch(errorMsg(res.data.msg))
        }
    }
}

export function logoutSubmit(params) {
    return {type:LOGOUT}
}

export function login({user, pwd}) {
    if(!user||!pwd) {
        return errorMsg('用户名密码必须输入')
    }
    return dispatch => {
        axios.post('/user/login', {user, pwd}).then(res => {
            if(res.status === 200 && res.data.code === 0) {
                dispatch(authSuccess(res.data.data))
            } else {
                dispatch(errorMsg(res.data.msg))
            }
        })
    }
}

export function register({user, pwd, repeatpwd, type}) {
    if(!user || !pwd || !type) {
        return errorMsg('用户名密码必须输入')
        // 密码长度、复杂度
    }
    if(pwd !== repeatpwd) {
        return errorMsg('两次密码输入不一致')
    }
    return dispatch => {
        axios.post('/user/register', {user, pwd, type}).then(res => {
            if(res.status === 200 && res.data.code === 0) {
                dispatch(authSuccess({user, pwd, type}))
            } else {
                dispatch(errorMsg(res.data.msg))
            }
        })
    }
}